/**
 * 
 */
package TeachPractice;

/**
 * @author Jiang Zhiyan
 *
 * 2021年4月21日 下午8:03:25
 */

public class Point {
	/**
	 * Java中对于属性（全局变量），系统会进行默认的初始化
	 * 
	 * 整型：0 浮点型：0.0 布尔型：false 字符型：'\u0000' 对象类型：null
	 */
	// 属性，全局变量，实例变量
	int x;// 横坐标
	int y;// 纵坐标

	/**
	 * 构造器：类实例化对象的根本途径
	 * 
	 * 类中如何没有声明任何构造器会默认提供无参数构造器。
	 * 
	 * 如果有其他的构造器的声明，系统不提供任何默认构造器。
	 * 
	 * 1. 构造器的名称和类名一致
	 * 
	 * 2. 构造器没有返回值
	 */
	public Point() {
		System.out.println("Point()被调用...");
	}

	/**
	 * 构造器的重载：构造器中的参数类型不一致形成构造器的重载
	 * 
	 * 
	 * @param a
	 * @param b
	 */
	public Point(int x, int y) {
		// this是类中的一个关键字，表示当前实例对象的引用。类似于第一人称“我”
		System.out.println("this=" + this);
		this.x = x;
		this.y = y;
	}

	// 实例化横坐标和纵坐标一致的点
	public Point(int x) {
//		this.x = x;
//		this.y = x;
		// 通过this直接调用当前类的构造器，必须声明在构造器的第一行。
		this(x, x);// 调用当前类中参数类型列表为（int,int）的构造器
	}

	/**
	 * 声明一个点到另一个点之间的距离
	 * 
	 * distance方法中。this可以表示当前点，other表示另一个点
	 */
	public double distance(Point other) {
		return Math.sqrt(Math.pow(this.x - other.x, 2) + Math.pow(this.y - other.y, 2));

	}
	
	
	/**
	 * 方法的重载
	 * 
	 *  java中在同一个类中，方法名相同，参数类型列表不同称为方法的重载。
	 * 
	 * @param x
	 * @param y
	 * @return
	 */
	public double distance(int x,int y) {
		//this.distance表示调用当前类中的方法。
		return this.distance(new Point(x,y));
	}
	
	/**
	 * 到原点的距离
	 */
	public double distance() {
		return this.distance(0, 0);
	}

}















